package com.java.yz.day11.ketang;

/*
    泛型通配符<?>
        任意类型，如果没有明确，那么就是Object以及任意的Java类了
    ? extends E
        向下限定，E及其子类
    ? super E
        向上限定，E及其父类
 */

import java.util.ArrayList;

class Animal{

}
class Dog extends Animal{

}
class Cat extends Animal{}
public class FanXingDemo1 {
    public static void main(String[] args) {
        //泛型通配符<?>
        //任意类型，如果没有明确，那么就是Object以及任意的Java类了
        ArrayList<Animal> animals = new ArrayList<>();
        //这是最原始的定义

        //现在可以这样子定义
        ArrayList<?> animals1 = new ArrayList<Animal>();
        ArrayList<?> animals2 = new ArrayList<Dog>(); //可以在后面穿数据类型
        ArrayList<?> cats = new ArrayList<Cat>();

        //? extends E
        //向下限定，E及其子类
        ArrayList<? extends Animal> objects = new ArrayList<Animal>();  //可以传本身或者以下子类
        ArrayList<? extends Animal> objects1 = new ArrayList<Dog>();
        ArrayList<? extends Animal> objects2 = new ArrayList<Cat>();

        //? super E
        //向上限定，E及其父类
        ArrayList<? super Dog> objects3 = new ArrayList<Dog>();  //可以串本身及其以上的父类
        ArrayList<? super Dog> objects4 = new ArrayList<Object>();
        ArrayList<? super Dog> objects5 = new ArrayList<Animal>();
    }
}
